MG996R 제품 받았습니다.
모터를 제어하기 위해 3가지 방법으로 테스트하였습니다.
1. UNO R3 와 MG996R 만을 사용
ㄱ. 5V, GND, PWM(9) 연결 시 USB 통신 끊김 현상 발생
ㄴ. 3.3V, GND, PWM(9) 연결 시 정회전으로만 동작
ㄷ. 소스 코드
#include <Servo.h>
Servo myServo;
int pos=0;
void setup() {
Serial.begin(9600);
myServo.attach(9);
}
void loop() {
myServo.write(150);
Serial.write("정회전");
delay(1000);
myServo.write(50);
Serial.write("역회전");
delay(1000);
myServo.write(90);
Serial.write("정지");
delay(5000);
}
-> 결과 : 역회전으로 동작하지않음, 정회전으로만 계속하여 돎
2. 위의 1번의 ㄱ,ㄴ 은 동일
ㄷ. 아두이노 예제 코드 sweep 사용
-> 결과 : 역회전으로 동작하지않음, 정회전으로만 계속하여 돎
3. 16채널 모터 제어보드, UNO R3, MG996R 사용
ㄱ. 제어보드와 우노 연결
ㄴ. 제어보드 0번 채널 사용 (이 때, 6V 전압 인가)
ㄷ. 소스 코드 2개
#include "HCPCA9685.h" // 설치한 헤더 파일
#define I2CAdd 0x40
HCPCA9685 HCPCA9685(I2CAdd);
unsigned int Pos; // 각도 조정을 위한 변수
void setup() {
HCPCA9685.Init(SERVO_MODE); // 쉴드를 서보모드로 초기화
HCPCA9685.Sleep(false);
Serial.begin(9600);
}
void loop() {
HCPCA9685.Servo(1, 150); // 연결된 서보모터를 Pos만큼 움직이기
Serial.println("정회전");
delay(3000);
HCPCA9685.Servo(1, 0);
Serial.println("역회전");
delay(3000);
HCPCA9685.Servo(1, 90);
Serial.println("정지");
delay(3000);
}
#include "HCPCA9685.h" // 설치한 헤더 파일 #define I2CAdd 0x40 HCPCA9685 HCPCA9685(I2CAdd); void setup() { HCPCA9685.Init(SERVO_MODE); // 쉴드를 서보모드로 초기화 HCPCA9685.Sleep(false); } void loop() { unsigned int Pos; // 각도 조정을 위한 변수 for(Pos = 10; Pos < 450; Pos++) { // Pos가 10부터 449까지 증가할 때 HCPCA9685.Servo(0,Pos); // 연결된 서보모터를 Pos만큼 움직이기 delay(1); } for(Pos = 450; Pos >= 10; Pos--) { // Pos가 450부터 10까지 감소할 때 HCPCA9685.Servo(0,Pos); // 연결된 서보모터를 Pos만큼 움직이기 delay(1); } }
|
구글링하여 찾아보니 90도를 기준으로 정지, 90도 초과이면 정회전, 90도 미만이면 역회전으로 나와있습니다.
하지만 멈추지않고 계속하여 정회전만 반복하여 회전합니다.
또한 아두이노 예제 코드 sweep를 사용하였음에도 정회전으로만으로 동작합니다.
모터가 제어 불능 상태입니다. 답변 부탁드립니다.
MG996R에 필요한 동작 전압 전류를 확인해보셔야할 것 같아요. 저도 테스트 하면서 보드 전류로는
제어 안된다는걸 알았습니다...